package jobs

import (
	"cronjob/crons"
	"sync"

	"github.com/astaxie/beego"
)

var (
	//创建cron
	mainCron *crons.Cron

	lock sync.Mutex
)

//
func init() {
	mainCron = crons.New()
	mainCron.Start()

}

//添加job
func AddJob(spec string, job *Job) bool {
	lock.Lock()

	defer lock.Unlock()

	beego.Info(job.id)
	//判断是job是否在entries中
	if GetEnteryById(job.id) != nil {
		return false
	}

	//添加job
	err := mainCron.AddJob(spec, job)

	if err != nil {
		beego.Error("AddJob ", err.Error())
		return false
	}
	return true
}

func GetEnteryById(id int) *crons.Entry {
	// beego.Info("GetEnteryById")
	entries := mainCron.Entries()
	// beego.Info(entries)
	for _, e := range entries {
		if v, ok := e.Job.(*Job); ok {
			if v.id == id {
				return e
			}
		}
	}
	return nil
}

// 返回执行最近执行
func GetEntries(size int) []*crons.Entry {
	entries := mainCron.Entries()
	if len(entries) > size {
		return entries[:size]
	}
	return entries

}

/**
func RemoveJob(id int) {
	mainCron.RemoveJob(func(e *crons.Entry) bool {
		if v, ok := e.Job.(Job); ok {
			if v.id == id {
				return true
			}
		}
		return false
	})
}
*/
func RomoveJob(id int) {
	mainCron.RemoveJob(func(e *crons.Entry) bool {
		if v, ok := e.Job.(*Job); ok {
			if v.id == id {
				return true
			}
		}

		return false
	})
}
